Intenté actualizar los datos de IndexedDB dentro de ".then" en fetch, pero eso no funciona dentro de los controladores de eventos, ya que lo supe a partir de este enlace posterior a la publicación . La actualización de los datos de IndexedDB fuera de ".then" está funcionando. Así que creé una variable booleana e intenté actualizarla dentro de ".then" y pensé en actualizar los datos de IndexedDB afuera, pero el valor booleano no se actualiza dentro de ".then".
.then(() =>{ data_inserted = true ; })Ahora fuera del ".entonces"
console.log(data_inserted); // value is false if ( data_inserted === true ) { // update IndexedDB code }Vi este enlace posterior a la publicación y no estoy seguro de cómo hacer una función de devolución de llamada como lo hicieron para mi código.
Por favor, ayúdenme a actualizar la variable booleana.
Gracias por adelantado.
Sospecho que esto es una falta de comprensión del código asíncrono.
El código asíncrono, then , ocurrirá DESPUÉS del código que le sigue. Nota:
let foo = "bar" someFunctionThatTakesOneSecond() .then((res) => { foo = "baz" console.log("then: ", foo); }) console.log("there: ", foo)Saldrá:
there: bar then: baz¿Por qué? Porque el código en el 'entonces' no se ejecutará hasta después de que se complete `someFunctionThatTakesOneSecond" y se cumpla la promesa. Pero el código después del bloque asíncrono se ejecutará sincrónicamente (es decir, de inmediato).
Es posible que desee utilizar el patrón async/await en su lugar: await detiene la ejecución hasta que la función async regrese.
Asi que:
let foo = "bar" await someFunctionThatTakesOneSecond() foo = "baz" console.log("then: ", foo); console.log("there: ", foo)Daría salida:
then: baz there: bazObtenga más información sobre async/await y JavaScript asíncrono aquí: https://blog.logrocket.com/understanding-asynchronous-javascript/